import router from "@/router";
import axios, { type AxiosInstance, type AxiosRequestConfig, type AxiosResponse, type InternalAxiosRequestConfig } from "axios";
import { ElMessage } from 'element-plus'

// 创建axios实例--- 基础配置
let service: AxiosInstance = axios.create({
  baseURL: "/api",
  timeout: 3000
})

// 请求拦截器
service.interceptors.request.use((conf: InternalAxiosRequestConfig) => {
  // 一般会操作：设置头部
  // conf.headers["Content-Type"] = "application/x-www-form-urlencoded"
  // conf.headers["token"]
  return conf
})

// 响应拦截去
service.interceptors.response.use((conf: AxiosResponse) => {
  if (conf.data.code !== 1) {
    ElMessage({
      message: conf.data.message,
      type: 'error',
    })
  }
  if (conf.data.code === 401) {
    ElMessage({
      message: conf.data.message,
      type: 'error',
    })
    router.push('/login')
  }
  return conf.data
})

// 返回值 公用 接口类型
export interface ApiResponse<T> {
  code: number,
  message: string,
  response: T
}

// 程序并不能知道 .then 的返回值  conf.data
// 告诉程序，.then 返回值 修改了

export default <T>(config: AxiosRequestConfig): Promise<ApiResponse<T>> => {
  return service(config)
}
